package com.haowen.controller;

import com.alibaba.fastjson.JSONObject;
import com.haowen.model.Message;
import com.haowen.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

@RestController
@RequestMapping("/message")
public class MessageController {

    @Autowired
    private MessageService messageService;

    // 发送消息
    @PostMapping("/add")
    public Object addMessage(@RequestBody Message message) {
        JSONObject jsonObject = new JSONObject();
        try {
            // 参数校验
            if (message.getFromUserId() == null || message.getToUserId() == null) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "发送者和接收者不能为空");
                return jsonObject;
            }
            if (message.getContent() == null || message.getContent().trim().isEmpty()) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "消息内容不能为空");
                return jsonObject;
            }

            // 设置默认值
            message.setCreateTime(new Date());
            message.setIsRead(0);
            message.setType(message.getType() != null ? message.getType() : 0);

            boolean flag = messageService.insert(message);
            if (flag) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "发送成功");
            } else {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "发送失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 0);
            jsonObject.put("msg", "发送失败：" + e.getMessage());
        }
        return jsonObject;
    }

    // 获取用户收到的消息列表
    @GetMapping("/user/received")
    public Object getReceivedMessages(@RequestParam Integer userId) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", 1);
        jsonObject.put("msg", "获取成功");
        jsonObject.put("data", messageService.getReceivedMessages(userId));
        return jsonObject;
    }

    // 获取用户发送的消息列表
    @GetMapping("/user/sent")
    public Object getSentMessages(@RequestParam Integer userId) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", 1);
        jsonObject.put("msg", "获取成功");
        jsonObject.put("data", messageService.getSentMessages(userId));
        return jsonObject;
    }

    // 标记消息已读
    @PostMapping("/read")
    public Object markAsRead(@RequestParam Integer messageId) {
        JSONObject jsonObject = new JSONObject();
        boolean flag = messageService.markAsRead(messageId);
        if (flag) {
            jsonObject.put("code", 1);
            jsonObject.put("msg", "标记成功");
        } else {
            jsonObject.put("code", 0);
            jsonObject.put("msg", "标记失败");
        }
        return jsonObject;
    }

    // 获取���读消息数量
    @GetMapping("/unread/count")
    public Object getUnreadCount(@RequestParam Integer userId) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code", 1);
        jsonObject.put("msg", "获取成功");
        jsonObject.put("data", messageService.getUnreadCount(userId));
        return jsonObject;
    }

    // 删除消息
    @GetMapping("/delete")
    public Object deleteMessage(@RequestParam Integer messageId) {
        JSONObject jsonObject = new JSONObject();
        boolean flag = messageService.delete(messageId);
        if (flag) {
            jsonObject.put("code", 1);
            jsonObject.put("msg", "删除成功");
        } else {
            jsonObject.put("code", 0);
            jsonObject.put("msg", "删除失败");
        }
        return jsonObject;
    }
} 